home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 8434 / 8434.xpi / chrome / content / common.js < prev    next >
Text File  |  2008-11-15  |  6KB  |  148 lines

  1. var googleredesignedCommon = {
  2. HTMLNS:"http://www.w3.org/1999/xhtml",
  3. XULNS:"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul",
  4. add:function (code) {
  5.     openDialog("chrome://googleredesigned/content/edit.xul", googleredesignedCommon.getRandomDialogName("googleredesignedEdit"), googleredesignedCommon.editDialogOptions, {code: code});
  6. },
  7. addAsSet:function (array, entry) {
  8.     for (var i = 0; i < array.length; i++) {
  9.         if (array[i] == entry) {
  10.             return;
  11.         }
  12.     }
  13.     array.push(entry);
  14. },
  15. addDomain:function (domain) {
  16.     var code = "@namespace url(http://www.w3.org/1999/xhtml);\n\n@-moz-document domain(\"" + domain + "\") {\n\n}";
  17.     googleredesignedCommon.add(code);
  18. },
  19. codePrefix:"data:text/css,",
  20. cssAreEqual:function (css1, css2) {
  21.     if (css1 == null && css2 == null) {
  22.         return true;
  23.     }
  24.     if (css1 == null || css2 == null) {
  25.         return false;
  26.     }
  27.     return css1.replace(/\s/g, "") == css2.replace(/\s/g, "");
  28. },
  29. dispatchEvent:function (doc, type) {
  30.     if (!doc) {
  31.         return;
  32.     }
  33.     var googleredesignedEvent = doc.createEvent("Events");
  34.     googleredesignedEvent.initEvent(type, false, false, doc.defaultView, null);
  35.     doc.dispatchEvent(googleredesignedEvent);
  36. },
  37. editDialogOptions:"chrome,resizable,dialog=no,centerscreen",
  38. getAppName:function () {
  39.     var appInfo = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo);
  40.     return appInfo.name;
  41. },
  42. getDOMId:function (uri) {
  43.     return "googleredesigned-" + uri.substring(6, uri.length);
  44. },
  45. getDocuments:function () {
  46.     var docs = [];
  47.     var ww = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
  48.     var windows = ww.getXULWindowEnumerator(null);
  49.     while (windows.hasMoreElements()) {
  50.         var windowDocShell = windows.getNext().QueryInterface(Components.interfaces.nsIXULWindow).docShell;
  51.         var containedDocShells = windowDocShell.getDocShellEnumerator(Components.interfaces.nsIDocShellTreeItem.typeAll, Components.interfaces.nsIDocShell.ENUMERATE_FORWARDS);
  52.         while (containedDocShells.hasMoreElements()) {
  53.             var viewer = containedDocShells.getNext().QueryInterface(Components.interfaces.nsIDocShell).contentViewer;
  54.             if (viewer) {
  55.                 docs[docs.length] = viewer.DOMDocument;
  56.             }
  57.         }
  58.     }
  59.     return docs;
  60. },
  61. getRandomDialogName:function (prefix) {
  62.     return prefix + String(Math.random()).split(".")[1];
  63. },
  64. hasSSSFix:!Components.ID('{41d979dc-ea03-4235-86ff-1e3c090c5630}').equals(Components.interfaces.nsIStyleSheetService),
  65. ios: Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService),
  66. openEdit:function (style) {
  67.     var windowName = "googleredesignedEdit" + style.uri.replace(/\W/g, "");
  68.     var windowsMediator = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
  69.     var win = windowsMediator.getMostRecentWindow(windowName);
  70.     if (win) {
  71.         win.focus();
  72.     } else {
  73.         openDialog("chrome://googleredesigned/content/edit.xul", windowName, googleredesignedCommon.editDialogOptions, {uri: style.uri, windowtype: windowName});
  74.     }
  75. },
  76. registerStyle:function (uri, css) {
  77.     var cssURL = googleredesignedCommon.codePrefix + css;
  78.     var u = this.ios.newURI(cssURL, null, null);
  79.     this.sss.loadAndRegisterSheet(u, this.sss.USER_SHEET);
  80.     if (!this.hasSSSFix) {
  81.         var docs = this.getDocuments();
  82.         for (var i = 0; i < docs.length; i++) {
  83.             var childDoc = docs[i];
  84.             var stylesheetLink = childDoc.createElementNS(this.HTMLNS, "link");
  85.             stylesheetLink.id = this.getDOMId(uri);
  86.             stylesheetLink.type = "text/css";
  87.             stylesheetLink.rel = "stylesheet";
  88.             stylesheetLink.href = cssURL;
  89.             stylesheetLink.charset = "UTF-8";
  90.             var nodeToAppendTo = null;
  91.             var heads = childDoc.getElementsByTagNameNS(this.HTMLNS, "head");
  92.             if (heads.length >= 1) {
  93.                 nodeToAppendTo = heads[0];
  94.             }
  95.             if (!nodeToAppendTo) {
  96.                 var heads = childDoc.getElementsByTagNameNS(null, "head");
  97.                 if (heads.length >= 1) {
  98.                     nodeToAppendTo = heads[0];
  99.                 }
  100.             }
  101.             if (!nodeToAppendTo) {
  102.                 nodeToAppendTo = childDoc.documentElement;
  103.             }
  104.             if (nodeToAppendTo) {
  105.                 nodeToAppendTo.appendChild(stylesheetLink);
  106.             }
  107.         }
  108.     }
  109. },
  110. reloadManage:function () {
  111.     var ww = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
  112.     var windows = ww.getXULWindowEnumerator(null);
  113.     while (windows.hasMoreElements()) {
  114.         var windowDocShell = windows.getNext().QueryInterface(Components.interfaces.nsIXULWindow).docShell;
  115.         var containedDocShells = windowDocShell.getDocShellEnumerator(Components.interfaces.nsIDocShellTreeItem.typeChrome, Components.interfaces.nsIDocShell.ENUMERATE_FORWARDS);
  116.         while (containedDocShells.hasMoreElements()) {
  117.             try {
  118.                 var childDoc = containedDocShells.getNext().QueryInterface(Components.interfaces.nsIDocShell).contentViewer.DOMDocument;
  119.                 if (childDoc.location.href.indexOf("chrome://googleredesigned/content/manage.xul") == 0) {
  120.                     childDoc.defaultView.init();
  121.                 }
  122.             } catch (ex) {
  123.                 Components.utils.reportError(ex);
  124.             }
  125.         }
  126.     }
  127. },
  128. sss: Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService),
  129. unregisterStyle:function (uri, css) {
  130.     var cssURL = this.codePrefix + css;
  131.     var u = googleredesignedCommon.ios.newURI(cssURL, null, null);
  132.     if (this.sss.sheetRegistered(u, this.sss.USER_SHEET)) {
  133.         this.sss.unregisterSheet(u, this.sss.USER_SHEET);
  134.     }
  135.     if (!this.hasSSSFix) {
  136.         var cssURLAttribute = cssURL.replace(/\n/, "");
  137.         var docs = this.getDocuments();
  138.         for (var i = 0; i < docs.length; i++) {
  139.             var childDoc = docs[i];
  140.             var link = childDoc.getElementById(this.getDOMId(uri));
  141.             if (link) {
  142.                 link.parentNode.removeChild(link);
  143.             }
  144.         }
  145.     }
  146. }
  147. }
  148.